#pragma once
#include <iostream>
#include <string>

#ifdef _WIN32
    // #include <fcntl.h>
    // #include <io.h>
    // #include <sys/stat.h>
    #include <boost/winapi/get_current_process_id.hpp>
#else
    #include <unistd.h>
#endif

unsigned long get_pid();

using Value = std::variant<
    std::string, // 字符串
    std::unordered_set<std::string>, // 集合
    std::unordered_map<std::string, std::string>, // 哈希表
    double, 
    bool, 
    int64_t,
    std::multimap<double, std::string>,    // 有序集合（分数 -> 成员）
    std::deque<std::string>                 // 列表
>;

struct ScanResult {
    int cursor;                          // 下一个游标
    std::vector<std::pair<std::string, std::string>> elements; // 键值对列表
};

// Add this before the class definition or in a utility header
// std::string to_lowercase(const std::string& str) {
//     std::string result = str;
//     std::transform(result.begin(), result.end(), result.begin(), [](unsigned char c) { return std::tolower(c); });
//     return result;
// }
// 工具函数：将小写字符串转换
std::string to_lowercase(const std::string& input);

bool match_pattern(const std::string& pattern, const std::string& key);